perm filename NEW.PUB[HAL,HE] blob
sn#153465 filedate 1975-04-10 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .TURN ON "∞π↑↓[]{_α#←→&∂"
C00009 00003 .NEXT PAGE
C00012 00004 .NEWSS PHILOSOPHY OF DESIGN
C00026 ENDMK
C⊗;
.TURN ON "∞π↑↓[]{_α#←→&∂";
.TURN OFF TAB;
.SPACING 125 MILLS ;
.PREFACE 200 MILLS ;
.INDENT 4,0;
.NOFILL; PREFACE SPREAD; FILL;
.MACRO UNFILL ⊂BEGIN NOFILL;PREFACE 0;TURN OFF "←→";GROUP⊃;
.MACRO REFILL ⊂END; CONTINUE⊃;
.MACRO MAYBREAK ⊂APART;GROUP;⊃;
.MACRO BULL ⊂ONCE; FLUSH LEFT⊃;
.MACRO COMT(X) ⊂BEGIN FILL;PREFACE 125 MILLS;INDENT X,X;}%4{⊃
.COUNT SECTION FROM 1 TO 99 PRINTING ⊂SECTION⊃;
.COUNT SUBSEC FROM 0 TO 99 IN SECTION PRINTING "!.1";
.COUNT SUBSUBSEC FROM 0 TO 99 IN SUBSEC PRINTING "!.1";
.COUNT FOOTNOTE INLINE FROM 1 TO 9 IN PAGE;
.MACRO NEWSEC(TITLE,ID) ⊂
.NEXT SECTION!;
.IF PICLIN≠NULL THEN ALLPIC;
.SECNAME←NULL;
.SSECNAME←NULL;
.SSSNUM←NULL
.NEXT SUBSEC;TABLE←0;
.SECNAME←"TITLE";
.SSECNAME←"ID";
.BEGIN INDENT 0,0;
.SKIP 2;
%5{SECTION!} {SECNAME}%*
.END
.SECNAME←"TITLE";⊃
.MACRO NEWSS(TITLE,ID,LAB) ⊂
.NEXT SUBSEC!;
.IF PICLIN≠NULL THEN ALLPIC;
.SSSNUM←SUBSEC!
.NEXT SUBSUBSEC;
.BEGIN INDENT 0,0;
.IF LINES≤8*SPREAD THEN NEXT PAGE ELSE SKIP 2*SPREAD;
.SSECNAME←"ID";
.IF SSECNAME=NULL THEN SSECNAME←"TITLE";
%5{SUBSEC!} TITLE%*
.END
.⊃
.MACRO NEWSSS(TITLE,LAB) ⊂
.NEXT SUBSUBSEC!;
.IF PICLIN≠NULL THEN ALLPIC;
.SSSNUM←SUBSUBSEC!
.BEGIN INDENT 0,0;
.IF LINES≤6*SPREAD THEN NEXT PAGE ELSE SKIP 1+SPREAD;
%4TITLE%*
.END
.BREAK
.⊃
.MACRO SECREF(LBL)⊂"Section ";SECTION! LBL⊃
.MACRO SSREF(LBL)⊂"Section ";SUBSEC! LBL ⊃
.MACRO SSSREF(LBL)⊂"Section ";SUBSEC! LBL⊃
.AT NULL ⊂IF FILLING THEN
. START BREAK;
. IF LINES<2*SPREAD+1 THEN NEXT PAGE END
. ELSE SKIP SPREAD⊃;
.COMMENT PICTURE MACROS;
.FIGS←TRUE;
.RECURSIVE MACRO STOREPIC(TITLE,LINES,TEMP) ⊂START
.PICLIN←PICLIN&" "[1 TO 2-LENGTH("LINES")]&"LINES";
.PICNUM←PICNUM&" "[1 TO 4-LENGTH(TEMP)]&TEMP;
.PICTLEN←PICTLEN&" "[1 TO 2-LENGTH(LENGTH("TITLE"))]&LENGTH("TITLE");
.PICTIT←PICTIT&"TITLE";
.END⊃
.BOTTOM←50;
.MACRO FULL⊂BOTTOM-3*SPREAD⊃
.MACRO HALF⊂BOTTOM/2-3*SPREAD⊃
.MACRO THIRD⊂BOTTOM/3-3*SPREAD⊃
.MACRO TWOTHIRDS⊂2*BOTTOM/3⊃
.MACRO NEWFIG(TITLE,εLINES,LABEL) ⊂
.FIGURE←FIGURE+1; LABEL TEMP←FIGURE; }Figure {TEMP;
.STOREPIC(|TITLE|,LINES,TEMP) ⊃;
.MACRO FIGREF(LBL)⊂"Figure "; LBL⊃
.MACRO MAKEFIG(TITLE,εLINES,LABEL) ⊂
.FIGURE←FIGURE+1;LABEL TEMP←FIGURE;
.STOREPIC(|TITLE|,LINES,TEMP) ⊃;
.PICLIN←PICNUM←PICTLEN←PICTIT←NULL
.MACRO SMALLPIC⊂⊃
.MACRO ALLPIC⊂⊃
.IF FIGS THEN START
.MACRO PLACEPIC ⊂BEGIN CENTER PREFACE SPREAD-1
.A←PICLIN[1 TO 2]; B←PICNUM[1 TO 4];
.C←PICTLEN[1 TO 2]; D←PICTIT[1 TO C];
.PICLIN←PICLIN[3 TO ∞]; PICNUM←PICNUM[5 TO ∞];
.PICTLEN←PICTLEN[3 TO ∞]; PICTIT←PICTIT[C+1 TO ∞];
.GROUP SKIP A;
Figure {B}
{D}
.SKIP 2*SPREAD;
.END⊃
.RECURSIVE MACRO RSPIC ⊂
.IF LINES-3*SPREAD≥PICLIN[1 TO 2] THEN PLACEPIC
.ELSE START
. TLIN←TLIN&PICLIN[1 TO 2]; PICLIN←PICLIN[3 TO ∞];
. TNUM←TNUM&PICNUM[1 TO 4]; PICNUM←PICNUM[5 TO ∞];
. C←PICTLEN[1 TO 2];
. TTLEN←TTLEN&C; PICTLEN←PICTLEN[3 TO ∞];
. TTIT←TTIT&PICTIT[1 TO C]; PICTIT←PICTIT[C+1 TO ∞];
. END;
.IF PICLIN≠NULL THEN RSPIC⊃
.RECURSIVE MACRO SMALLPIC ⊂
.TLIN←TNUM←TTLEN←TTIT←NULL;
.RSPIC;
.PICLIN←TLIN; PICNUM←TNUM; PICTLEN←TTLEN; PICTIT←TTIT;
.IF LINES<2*SPREAD-1 THEN NEXT PAGE ⊃
.RECURSIVE MACRO ALLPIC ⊂
.IF PICLIN≠NULL THEN SMALLPIC;;
.IF PICLIN≠NULL THEN BEGIN PLACEPIC; ALLPIC END ⊃
.AT NULL ⊂IF FILLING THEN
. START BREAK;
. COMMENT IF LINES<2*SPREAD+1 THEN NEXT PAGE; END
. ELSE SKIP SPREAD⊃;
.BEFORE PAGE ⊂STANDARD TITLES;
. IF PICLIN≠NULL THEN SMALLPIC ⊃
.END COMMENT PICTURE MACROS;
.device xgp
.IF XCRIBL THEN FONT 1 "BASL30[HAL,HE]"
.IF XCRIBL THEN FONT 4 "BASI30[HAL,HE]"
.IF XCRIBL THEN FONT 5 "BASB30"
.IF XCRIBL THEN FONT 6 "BDR40";
.COMMENT IF XCRIBL THEN FONT 7 "LPT";
.!xgplftmar← 200
.PAGE FRAME 28 HIGH 80 WIDE;
.TITLE AREA HEADING LINES 1 TO 2 CHARS 1 TO 80;
.AREA TEXT LINES 3 TO 28 CHARS 1 TO 80;
.TURN ON "%\"
.TABS 17
.SECID←"SECTION";
.SECNAME←NULL
.COUNT PAGE FROM 1 TO 999 PRINTING ⊂PAGE⊃;
.IF XCRIBL THEN SELECT 1
.NEXT PAGE
.SSECNAME←NULL;
.PORTION TITLEPAGE
.BEGIN NOFILL;turn on "↑";SPREAD←1;
.AREA TEXT LINES 1 TO 28 CHARS 1 TO 80
.NEXT PAGE
%1STANFORD ARTIFICIAL INTELLIGENCE LABORATORY →APRIL 1975
.GROUP SKIP 4
.NOFILL CENTER
%6An Overview of AL, A Programming System for Automation
.GROUP SKIP 2
%1Raphael Finkel, Russell Taylor, Robert Bolles, Richard Paul↑*, Jerome Feldman↑*
.GROUP SKIP 2
.FILL ADJUST COMPACT
.NARROW 8,8
AL is an high-level programming system for specification of manipulatory tasks
such as assembly of an object from parts.
AL includes an ALGOL-like source language,
a translator for converting programs into runnable code, and a runtime system
for controlling manipulators and other devices. The system includes
advanced features for describing individual motions of manipulators, for using
sensory information, and for describing assembly algorithms in terms
of common domain-specific primitives. This paper describes the design
of AL, which is currently being implemented as a successor to the Stanford WAVE
system.
.WIDEN
.NOFILL SKIP TO LINE 21
.FILL
∞_→#
.BREAK
%4↑* Jerome Feldman is now at the University of Rochester.
Lou Paul is now at the Stanford Research Institute.
This research was supported in part by the
National Science Foundation under contract No. GIα-42906 and in part by
the Advanced Research
Projects Agency of the Office of Defense under Contract No. DAHC-15-73-C-0435.
The views and conclusions in this document are those of the authors and
should not be interpreted as necessarily representing the official policies,
either expressed or implied, of the
funding agencies.
.END
.ADJUST COMPACT
.SECNAME←NULL
.SSECNAME←NULL
.SSSNUM←NULL
.PORTION BODY;
.COUNT PAGE FROM 1 TO 999 PRINTING ⊂PAGE⊃;
.EVEN HEADING(Page {PAGE!},{SSECNAME},{SSSNUM});
.ODD HEADING({SSSNUM},{SSECNAME},Page {PAGE!});
.NEXT PAGE
.NEWSS PHILOSOPHY OF DESIGN
.NEWSSS DATA AND CONTROL STRUCTURES
The principal mode of input to AL is
textual, as opposed to spoken or manual (joystick). There are levels
of complexity which are much more readily transmitted from man to
machine through an interface of symbolic text.
Simultaneous motions of two arms and termination
and error conditions are more likely to be unambiguously described
through the medium of text; the structure
imposed on the textual language forces a consistent framework on
initially less structured intuitive ideas. Non-textual forms of
input for defining target locations and
suggesting arm trajectories to avoid collisions
are most useful when applied in conjunction with a program text which
supplies the skeletal intent of the programmer.
The supervisor level of AL is simple enough to allow
natural teaching by showing; it should be easy to interface such
devices as joysticks and vocal input into AL, although we
do not intend to do so at present.
Experience with languages like SAIL and WAVE has shown that text macros are a
useful feature; they reduce the amount of repetitive
typing. AL has a general-purpose text macro system
interfaced into the scanner and parser.
The datatypes available include those types necessary to refer to
one-dimensional measures (like distance, time, mass) and
three-dimensional measures (like directed distance, locations,
orientations). Arithmetic operators are available not only for
the standard scalar operations like multiplication and addition, but
also for such operations as rotation and translation.
Provision is made for
simultaneous execution of several processes This allows
calculation
and arm motion to take place simultaneously; several
manipulators can be in independent or coordinated motion.
.NEWSSS MOTION SPECIFICATIONS
Experience with WAVE has shown that calculating trajectories for
manipulators is desirable but time-consuming.
Trajectory calculations, together with all other calculations which
need only be performed once, are done at compile time. This
allocation of effort drastically reduces the computing load at
execution time and eliminates wasteful recomputation every time a
sequence of actions is executed. This leads to a clear distinction
between compile-time and runtime.
Trajectories may be specified to pass through
given intermediate points. The primary use of this is to avoid
collisions during the motion. It is also useful in specifying
complicated motions.
A wide range of exceptional conditions can occur during the motion of a
manipulator.
Appropriate action must be taken as soon as any
of these occurs, for example to start up a new concurrent process
or to notify the user.
Therefore, AL allows the
flexible specification of conditions to monitor during the
course of motions (and during execution of blocks of code in
general), and what to do in the case that a tested condition occurs.
.BEGIN "EXAMPLE";NOFILL;INDENT 0,0;PREFACE 0;
whole_task: BEGIN
.COMT 4
α{First declare the necessary FRAMEs and describe how they are
initially related. The attach structure representing the initial
world is shown in
{NEWFIG Attach Structures for the Task Example,FULL,ats←}.
The arrows indicate how the movement of a
frame affects other frames. If a frame at the tail of an arrow
is moved (by the arm, visually updated, etc.) the frame at the
head of the arrow will be automatically updated. The double
arrows are the results of RIGIDLY AFFIXing one frame to
another.α}
.END
.END "EXAMPLE"